#include "bsp_led.h"

/**
 * 开启LED2，PD7
 */
void led2_config(){
	// 开启GPIOD的端口时钟
	BSP_RCU_AHB1EN |= (0x01 << 3);       // RCU_AHB1EN寄存器的第3位置1 
	
	// 配置PD7为输出模式
	BSP_GPIOD_CTL &= ~(0x03 << 14);   	// 清零第15位和第14位
	BSP_GPIOD_CTL |=  (0x01 << 14);     // 第15位和第14位配置为01
	
	// 配置PD7为浮空模式，无上拉下拉 
	BSP_GPIOD_PUD &= ~(0x03 << 14);   	// 清零第15位和第14位
	
	// 配置PD7位推挽输出 
	BSP_GPIOD_OMODE &= ~(0x01 << 7);     // 把第7位清零
	
	// 配置PD7的速度为等级2 50MHZ 
	BSP_GPIOD_OSPD &= ~(0x03 << 14);   // 清零第15位和第14位
	BSP_GPIOD_OSPD |= (0x02 << 14);   // 第15位和第14位配置为10
}

void led2_on1(void)
{
	// 输出高电平
	BSP_GPIOD_OCTL |= (0x01 << 7);
}

void len2_off1(void)
{
	// 输出低电平
	BSP_GPIOD_OCTL &= ~ (0x01 << 7);
}

void led2_on2(void){
	// 输出高电平
	BSP_GPIOD_BOP |= (0x01 << 7);
}

void len2_off2(void){
	// 输出低电平
	BSP_GPIOD_BOP |= (0x01 << (7 + 16));
}

void led2_toggle(void){
	gpio_bit_toggle(GPIOD,GPIO_PIN_7);    // led电平状态翻转
}

/**
 * 开启LED1，PE3
 */
void led1_config(void){
	/* 使能时钟 */
	rcu_periph_clock_enable(RCU_GPIOE);
	/* 配置为输出模式 浮空模式 */
	gpio_mode_set(GPIOE,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_3);
	/* 配置为推挽输出 50MHZ */
	gpio_output_options_set(GPIOE,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3);
}

void led1_on1(void){
	gpio_bit_set(GPIOE, GPIO_PIN_3);
}

void led1_off1(void){
	gpio_bit_reset(GPIOE, GPIO_PIN_3);
}

void led1_on2(void){
	gpio_bit_write(GPIOE, GPIO_PIN_3, SET);
}

void led1_off2(void){
	gpio_bit_write(GPIOE, GPIO_PIN_3, RESET);
}

//PG3
void led3_config(void){
	/* 使能时钟 */
	rcu_periph_clock_enable(RCU_GPIOG);
	/* 配置为输出模式 浮空模式 */
	gpio_mode_set(GPIOG,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_3);
	/* 配置为推挽输出 50MHZ */
	gpio_output_options_set(GPIOG,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3);
}

void led3_on(void){
	gpio_bit_set(GPIOG, GPIO_PIN_3);
}

void led3_off(void){
	gpio_bit_reset(GPIOG, GPIO_PIN_3);
}

// PA5
void led4_config(void){
	/* 使能时钟 */
	rcu_periph_clock_enable(RCU_GPIOA);
	/* 配置为输出模式 浮空模式 */
	gpio_mode_set(GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_5);
	/* 配置为推挽输出 50MHZ */
	gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_5);
}

void led4_on(void){
	gpio_bit_set(GPIOA, GPIO_PIN_5);
}

void led4_off(void){
	gpio_bit_reset(GPIOA, GPIO_PIN_5);
}




void led_config(){
		led1_config();
	  led2_config();
	  led3_config();
	  led4_config();
}

void led_run(){
			led1_on1();
			len2_off1();
			led3_off();
			led4_off();
			delay_1ms(200);
			
			led1_off1();
			led2_on1();
			delay_1ms(200);
			
			len2_off1();
			led3_on();
			delay_1ms(200);
			
			led3_off();
			led4_on();
			delay_1ms(200);
}
